package com.gengzp.system.facade;

import com.gengzp.common.model.permission.dto.ConsolePageDto;
import com.gengzp.common.model.permission.dto.PermissionDto;
import com.gengzp.common.model.permission.entity.UserRoleRelation;

import java.util.List;

/**
 * @ClassName PermissionFacade
 * @Description 权限模块门面层接口
 * @Author gengzp
 * @Date 2025/9/19 11:42
 */
public interface PermissionFacade {

    /**
     * 根据角色id删除用户角色关联
     *
     * @param roleId 角色id
     */
    void removeUserRoleRelationsByRoleId(Long roleId);

    /**
     * 根据用户id删除用户角色关联
     *
     * @param userId 用户id
     */
    void removeUserRoleRelationsByUserId(Long userId);

    /**
     * 根据用户id查询关联的所有角色id
     *
     * @param userId 用户id
     * @return 角色id集合
     */
    List<Long> searchRoleIdsByUserId(Long userId);

    /**
     * 查询所有权限名称
     *
     * @return 权限名称集合
     */
    List<String> searchAllLeafPermissionCodes();

    /**
     * 查询所有控制台页面编码
     *
     * @return 控制台页面编码集合
     */
    List<String> searchAllConsolePageCodes();

    /**
     * 根据角色id查询关联的用户id集合
     *
     * @param roleId 角色id
     * @return 用户id集合
     */
    List<Long> searchUserIdsByRoleId(Long roleId);

    /**
     * 根据角色id集合查询关联的用户角色关联关系
     *
     * @param roleIds 角色id集合
     * @return 用户角色关联关系集合
     */
    List<UserRoleRelation> searchUserRoleRelationsByRoleIds(List<Long> roleIds);

    /**
     * 根据权限编码集合查询权限信息dto集合
     *
     * @param permissionCodes 权限信息dto集合
     * @return 权限编码集合
     */
    List<PermissionDto> searchPermissionDtosByPermissionCodes(List<String> permissionCodes);

    /**
     * 根据页面编码集合查询控制台页面信息dto集合
     *
     * @param pageCodes 页面编码集合
     * @return 控制台页面信息dto集合
     */
    List<ConsolePageDto> searchConsolePagesByPageCodes(List<String> pageCodes);

}
